package org.smartboot.sosa.rpc;

/**
 * 定义业务层会话接口
 *
 * @author Seer
 * @version Session.java, v 0.1 2015年11月22日 下午4:00:50 Seer Exp.
 */
public interface Session {
	/**
	 * 获取会话ID
	 *
	 * @return
	 */
	public String getId();

	/**
	 * 唤醒当前处于等待响应状态的请求
	 *
	 * @param baseMsg
	 *            响应消息
	 * @return
	 */
	public boolean notifySyncMessage(RpcResponse baseMsg);

	/**
	 * 发生消息且不等待响应消息
	 *
	 * @param rspMsg
	 */
	public void sendResponse(RpcResponse requestMsg) throws Exception;

	/**
	 * 发送消息并同步等待响应
	 *
	 * @param reqMsg
	 * @return
	 * @throws Exception
	 */
	public RpcResponse sendRpcRequest(RpcRequest request) throws Exception;

	/**
	 * 发送消息并同步等待响应 /**
	 *
	 * @param requestMsg
	 * @param timeout
	 *            超时时间
	 * @return
	 * @throws Exception
	 */
	public RpcResponse sendRpcRequest(RpcRequest requestMsg, long timeout) throws Exception;

	/**
	 * 关闭Session
	 */
	public void close();

	/**
	 * 是否已关闭
	 */
	public boolean isClosed();
	/**
	 * 获取会话的超时时长
	 *
	 * @return
	 */
	public int getMaxInactiveInterval();

	public void setMaxInactiveInterval(int interval);
	/**
	 * 获取上一次接受客户端请求的时间
	 *
	 * @return
	 */
	public long getLastAccessedTime();

	/**
	 * 失效当前会话
	 */
	public void invalidate();

	/**
	 * 失效当前会话
	 */
	public void invalidate(boolean immediate);

	/**
	 * 当前会话是否已失效
	 */
	public boolean isInvalid();
	
	/**
	 * 刷新访问时间
	 */
	public void refreshAccessedTime();
}
